/**
 * 封装axios 的
 */
// 导入veux实例
import store from '@/store/user'
// 导入router实例
import router from '@/router/index'

// 导入elme mess 方法
import { Message } from 'element-ui'

import axios from 'axios'
const baseURL = 'http://big-event-vue-api-t.itheima.net'
const request = axios.create({
  baseURL
})

request.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  //= =场景  判断给需要添加heder 参数值的接口，添加token==
  // config 请求配置
  // 场景：发送请求之前，统一添加请求头header
  if (config.url.startsWith('/my')) {
    // 以my开头的请求，添加 header
    // store ===  等价于 this.$store
    // user.token  ==>是指子模块下的变量token

    // config.headers.Authorization = store.state.user.token
    config.headers.Authorization = store.state.Lgin.token
  }
  // console.log('1.请求', config)
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

/**
 * config  请求的配置的对象（包含当前请求的所有配置）
 */

// 添加响应拦截器
request.interceptors.response.use(function (response) {
  // 2xx 范围内的状态码都会触发该函数。
  // 对响应数据做点什么
  // console.log('2.请求成功', response)
  return response
}, function (error) {
  // 超出 2xx 范围的状态码都会触发该函数。
  // 对响应错误做点什么
  // console.log('3.请求失败', error)
  // 需求？在token失效或么有的情况下接口请求401 跳回登录页
  console.log(error)

  // 解决：多个接口请求401重复跳转登陆页
  if (error.response.status === 401) {
    // 判断如果已经跳回登录页了，后边的代码就没有在执行了
    //  使用router 实例, router.currentRoute.path 获取当前访问的页面地址
    if (router.currentRoute.path === '/login') return
    /**
     * 1、删除token =》怎么删除 vuex存的token？
     * 2、跳回登录页 =>js怎么跳页面 =》导入router 的实例
     * token 失效：加个消息提示=》 导入 elm 消息提示方法
     */
    Message.error('token失效了，请重新登陆！')
    store.commit('lgin/delToken')
    router.replace('/login')
  }
  return Promise.reject(error)
})

// 2导出axios
export default request
// 导出后台基础地址
export { baseURL }
